<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Map</title>
</head>

<body>
  <script>
    // 声明一个 Map 类似Object对象
    /* 
      1.属性和方法 Map比Set多一个读取方法get()  并且写入方法set()
        其他方法和属性基本一致，只是有些参数的含义上略有不同
      
      2.比较对象
    */
    let m = new Map();

    // 添加元素
    m.set('name', '尚硅谷');
    m.set('change', function () {
      console.log("我们可以改变你！！")
    });

    let key = {
      school: 'ATGUIGU'
    };
    m.set(key, ['北京', '上海', '深圳']);

    // size
    console.log(m.size);

    // 删除
    m.delete('name');

    // 获取
    console.log(m.get('change'));
    console.log(m.get(key));

    // 清空
    // m.clear();

    // 遍历
    for(let v of m) {
      console.log(v)  // 键值对数组
    }
    console.log(m)

    /* 
      面试题
    */

    var map = new Map()
        obj = {}

        map.set(null, 1)
        map.set(undefined, 2)
        map.set(NaN, 3)
        map.set(1, 4)
        map.set("1", 5)
        map.set({}, 6)

        console.log(map.get(null))      // 1
        console.log(map.get(undefined)) // 2
        console.log(map.get(NaN))       // 3
        console.log(map.get(1))         // 4
        console.log(map.get("1"))       // 5
        console.log(map.get(obj))       // undefined

  </script>
</body>

</html>